package com.ubaiying.robot;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestGetHtml {
	
	/*
	 * 信息抓取
	 * 
	 * 源信息主要包含能够搜集到某分类下的一定数量的信息连接。
	 * 最少应含有以下几项内容:
	 * 1，分页表达式，由分页url和页码表达式组成，还应有页码表达式的取值范围。
	 * 2，匹配每个信息连接的正则表达式。由过滤正则、取值位置组成。
	 * 
	 * 获取到源下的信息连接后，存置内存。源信息应保存在文档或者数据库中，并记录源第一页的MD5码，和更新时间。
	 * 对连接集合进行遍历抓取，取得每一个信息的标题、附加属性（工作经历，待遇范围，工作地点，招聘人数。。。。）
	 * 使用正则表达式对信息页面的各种属性进行筛选。正则也由表达式和取值位置组成。
	 * 
	 * 抓取到的信息和属性存储为document，并对信息主体进行分词索引，但是主体内容并不存储。
	 * 字段应包含：采集地址、最后更新时间、最后检查更新时间、来源网站、信息标题、附加属性、浏览次数、关键字、采集页面MD5值。
	 */
	
	/*
	 * 信息更新
	 * 
	 * 设定时间周期对已经采集到的数据进行检查更新。
	 * 1，定时对源中所含有的信息进行检查，如果发现第一页的MD5码与上次采集的不符，则进行“补充采集”。
	 * 在采集信息连接时，应判断该连接是否已经存在在文档中，如果已存在则停止“补充”。
	 * 2，对已经采集到的信息，应该对其定时进行更新检查，当发现采集连接的页面MD5值与document不符时，
	 * 应该对该页面进行重新采集。
	 * 
	 * 总结：信息更新主要分为两种，一种是补充采集（初次导入采集也属于这个范畴，只是每一条连接都是匹配不到的。）
	 * 另外一种是数据更新，主要是通过比对页面html的MD5值来判断是否需要重新更新这个页面的数据。
	 * 
	 */
	
	public static void main(String args[]){
		String regex = "<td class=\"forPost\">                                        <h1><a href=\"(.*?)\"  target=\"_blank\" class=\"postName\">(.*?)</a></h1>";
		String html = TestGetHtml.getHrmlFromUrl("http://so.tianjihr.com/AdvanceSearcher.aspx?t=&q=&hy=&zw=2023&cs=&px=&page=1");
		Matcher matcher = Pattern.compile(regex, Pattern.CANON_EQ).matcher(html);
		while(matcher.find()){
			System.out.println(matcher.group(1));
			System.out.println(matcher.group(2));
		}
	}
	
	public static String getHrmlFromUrl(String urlPath){
		String temp;
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL(urlPath);
			BufferedReader bfr = new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));
			while((temp = bfr.readLine()) != null){
				sb.append(temp);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}

}
